搜索 K
Appearance
博客正在加载中...
Appearance
本文说明下如何输出字符数据到浏览器上显示
输出字符的步骤:
使用这个流不用 flush,因为 Servlet 响应后会调用 flush 并销毁这个流。
package com.peterjxl.response;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/responseDemo4")
public class ResponseDemo4 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1.获取字符输出流
PrintWriter writer = resp.getWriter();
// 2.通过流输出数据
writer.write("Hello Response");
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
} 重启服务器,访问 http://localhost: 8080/hello/responseDemo4,可以看看浏览器上显示了字符
也可以显示 HTML 字符串:
// writer.write("Hello Response");
writer.write("<h1>This is HTML</h1>");
如果我们输出中文,会发现浏览器上是乱码的:
writer.write("<h1>This is HTML</h1>");
writer.write("<h1>从01开始</h1>");
为什么乱码?
PrintWriter pw = response.getWriter(); 获取的流的默认编码是 ISO-8859-1;解决方法:
resp.setCharacterEncoding("GBK");
// 1.获取字符输出流
PrintWriter writer = resp.getWriter();
// 2.通过流输出数据
writer.write("<h1>This is HTML</h1>");
writer.write("<h1>从01开始</h1>");重启 Tomcat,访问效果如下:
并不推荐设置 response 对象的编码格式。目前没有乱码是因为我们在国内访问,大部分使用的都是国内的编码;而如果是国外访问,则又会乱码了。
推荐的方式是设置编码并告诉浏览器,服务器用的是什么编码:
resp.setHeader("content-type", "text/html;charset=utf-8");
// 1.获取字符输出流
PrintWriter writer = resp.getWriter();
// 2.通过流输出数据
writer.write("<h1>This is HTML</h1>");
writer.write("<h1>从01开始</h1>");使用 setHeader 不仅仅告诉浏览器响应消息用的是什么类型,也顺便设置了 response 的类型,因此我们可以省略设置编码的代码:resp.setCharacterEncoding("GBK");
也可以使用这个写法设置 header:
resp.setContentType("text/html;charset=utf-8");